import logging
import os,time
import yagmail
import HTMLTestRunner
import HTMLTestRunner_PY3
import HTMLTestRunner_cn
import XTestRunner
import BeautifulReport



class Tools():


    # 封装日志
    def log4(self):
        log = logging.basicConfig(level=logging.DEBUG,
                                  format='%(levelname)s -> %(asctime)s -> %(message)s -> %(filename)s -> %(lineno)d行',
                                  filename='E:\zhuangaoer_pyCharm\zhuangaowuday1\A3mall_pytest/pytest_yw4.log', filemode='w+')
        return log
    def log1(self):
        log = logging.basicConfig(level=logging.DEBUG, format='%(levelname)s -> %(asctime)s -> %(message)s -> %(filename)s -> %(lineno)d行')
        return log


    def log2(self):
        # 配置一个日志系统，将日志消息输出到控制台，并按照指定的格式显示。这对于调试和记录程序运行时的信息非常有用
        logger = logging.getLogger()   # 获取日志器   如果没有指定名称，则返回默认的根日志器
        logger.setLevel(logging.INFO)   #  设置日志器的日志级别为INFO    这意味着只有INFO级别及以上（WARNING, ERROR, CRITICAL）的日志消息会被处理
        ch = logging.StreamHandler()    # 输入日志到控制台    创建日志处理器    创建了一个流处理器（StreamHandler），它将日志消息输出到控制台
        ch.setLevel(logging.INFO)  # 输出控制台的日志等级是INFO   设置流处理器的日志级别为INFO，与日志器的级别相同
        # 定义日志Handler的输出格式    %(lineno)d：日志消息发生时的行号
        fmt = logging.Formatter('%(levelname)s -> %(asctime)s -> %(message)s -> %(filename)s -> %(lineno)d行')
        ch.setFormatter(fmt)    #  设置日志格式   将定义的格式应用到流处理器上
        logger.addHandler(ch)  #    添加处理器到日志器  将流处理器添加到日志器，使其成为日志消息的输出目标

        logging.info('这是一个关于XXX的INFO日志')   #    记录日志消息

    def log5(self):
        logger = logging.getLogger()
        logger.setLevel(logging.INFO)
        currTime = time.strftime("%Y-%m-%d")    # 获取当前时间  并将其格式化为 YYYY-MM-DD 的形式
        # 获取日志文件路径   这几行代码获取当前脚本文件的绝对路径，并构建日志文件的目录路径
        log_py_path = os.path.abspath(__file__)     #   当前py文件的绝对路径，会定位到对应的py文件
        log_dir_path = os.path.split(log_py_path)[0]    # 当前py文件的文件路径
        pro_path = os.path.dirname(log_dir_path)    # 当前文件的对应的上一层目录
        log_path = pro_path + './'

        # 构建日志文件名  这行代码将日志文件的目录路径和当前日期组合起来，形成日志文件的完整路径和文件名
        log_name = log_path + currTime + '.log'
        # 创建文件处理器  这行代码创建一个文件处理器（FileHandler），用于将日志消息写入文件。mode='a' 表示以追加模式打开文件。
        fh = logging.FileHandler(log_name, mode='a')    #  w是覆盖
        fh.setLevel(logging.INFO)  # 设置处理器的日志级别
        fmt = logging.Formatter('%(asctime)s -> %(filename)s : [%(lineno)s] -> [%(levelname)s] -> %(message)s')
        fh.setFormatter(fmt)
        logger.addHandler(fh)
        logger.info('This is ago 5 2210A one logger level is INFO')

    # 封装报告
    def Report1(self):
        report = HTMLTestRunner_PY3.HTMLTestRunner(open('./movie_gx.html', 'wb'), title='维度电影测试报告',
                                                   description='维度电影相关接口自动化测试')
        return report

    def Report2(self):
        report2 = HTMLTestRunner_cn.HTMLTestRunner(open('./movie02.html', 'wb'), title='维度电影测试报告02',
                                                   description='维度电影相关接口自动化测试02')
        return report2

    def Report3(self):
        report3 = HTMLTestRunner.HTMLTestRunner(open('./movie03.html', 'wb'), title='维度电影测试报告03',
                                                   description='维度电影相关接口自动化测试03')
        return report3

    # XTestRunner
    def Report4(self):
        # rerun:失败后重新执行一次，默认0次， language：语言  zh-CN :中文
        report4 = XTestRunner.HTMLTestRunner(open('./movie05.html', 'wb'), title='维度电影测试报告03',
                                                   description='维度电影相关接口自动化测试03', rerun=1, language='zh-CN')
        return report4

    def Report5(self, suite):
        # rerun:失败后重新执行一次，默认0次， language：语言  zh-CN :中文
        report5 = BeautifulReport.BeautifulReport(suites=suite)
        report5.report(filename='./movie08.html',description='测试报告',log_path='.',report_dir='.')


    # 封装邮箱
    def Mail(self):
        mail = yagmail.SMTP(user='2318636512@qq.com', password='oonwmxkqqgyodibd', host='smtp.qq.com')
        mail.send(to='2318636512@qq.com', subject='维度电影的测试报告与日志文件', contents=['维度电影接口自动化测报告与日志文件，请查收！',
                                                                                            './movie_gx.html', './movie_gx.html'])
        mail.close()


